/**
 * 
 */
package com.kingpigeon.iotsvrdemo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;

/**
 * @author xuhw
 *
 */
public class RTUCMD71UP {
	private ChannelHandlerContext ctx;
	private byte[] data;
	/**
	 * 
	 */
	public RTUCMD71UP(ChannelHandlerContext ctx, byte[] data) {
		this.ctx = ctx;
		this.data = data;
	}
	public void RTUCMD71UPHandler()
	{
		/**0x71（上行）请求报文数据包内容
				字段名	长度（Byte)	数据类型	说明
				设备ID	15	ASCII码	具体ASCII码的解析算法参考<8.4.ASCII码类型字段解包/组包样例代码>

		字段结构体	字段名	长度（Byte)	数据类型	说明
					起始	2	整型	默认0x7F 0x7F
				时间	年	1	整型	年份只取后两位，服务器须在年份前增加“20”。例如2018年，报文内容为0x12
					月	1	整型	
					日	1	整型	
					时	1	整型	
					分	1	整型	
					秒	1	整型	
		数据块1	传感器类型	1	整型	(详情见7.1传感器类型)
				传感器地址	1	整型	(详情见7.2传感器地址)
					数据	4	当传感器类型为0x01、0x02（AIN）、0x04（温湿度）时，该数据类型为浮点型（小端模式）	具体浮点数（小端模式，低位在前）类型字段的解包和组包算法参考<8.3浮点型(小端模式)类型字段解包/组包样例代码>
		数据块2	传感器类型	1	整型	
				传感器地址	1	整型	
					数据	4		
		数据块N	传感器类型	1	整型	
				传感器地址	1	整型	
					数据	4		
		*/
    	String sMac = KingPigeonUtils.bytesToAscii(data,8,15);
    	System.out.println("sMac:"+sMac);

    	int iYear = KingPigeonUtils.byteToIntLe(data[25]);
    	System.out.println("iYear:"+iYear);
    	int iMonth = KingPigeonUtils.byteToIntLe(data[26]);
    	System.out.println("iMonth:"+iMonth);
    	int iDay = KingPigeonUtils.byteToIntLe(data[27]);
    	System.out.println("iDay:"+iDay);
    	int iHour = KingPigeonUtils.byteToIntLe(data[28]);
    	System.out.println("iHour:"+iHour);
    	int iMinute = KingPigeonUtils.byteToIntLe(data[29]);
    	System.out.println("iMinute:"+iMinute);
    	int iSecond = KingPigeonUtils.byteToIntLe(data[30]);
    	System.out.println("iSecond:"+iSecond);
    	
    	Date dTime = null;
    	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	try {
    		//获取的年份只有两位
    		dTime = format.parse("20"+iYear+"-"+iMonth+"-"+iDay+" "+iHour+":"+iMinute+":"+iSecond);
		} catch (ParseException e) {
			e.printStackTrace();
		}
    	System.out.println("dTime:"+dTime);
    	for(int iOffset=31;data.length>iOffset+6;iOffset=iOffset+6)
    	{
			String sSensorType = KingPigeonUtils.bytesToHexString(data, iOffset, 1);
			String sSensorAddr = KingPigeonUtils.bytesToHexString(data, iOffset+1, 1);
	    	System.out.println("sSensorType:"+sSensorType);
	    	System.out.println("sSensorAddr:"+sSensorAddr);
			if(sSensorType.equals("01")) {
				if(sSensorAddr.equals("00")) {
					Float fSensorData = KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2);
					System.out.println("传感器1的数据为:"+fSensorData);
				}else if(sSensorAddr.equals("01")) {
					System.out.println("传感器2的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("02")) {
					System.out.println("传感器3的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("03")) {
					System.out.println("传感器4的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}
			}else if(sSensorType.equals("02")){
				if(sSensorAddr.equals("00")) {
					System.out.println("AIN0的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("01")) {
					System.out.println("AIN1的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("02")) {
					System.out.println("AIN2的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("03")) {
					System.out.println("AIN3的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("04")) {
					System.out.println("AIN4的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("05")) {
					System.out.println("AIN5的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}
			}else if(sSensorType.equals("03")){
				if(sSensorAddr.equals("00")) {
					/*数据中bit28～31代表类型，1代表常闭，2代表常开，3代表变位，5计数器；*/
					System.out.println("DIN0的类型（1代表常闭，2代表常开，3代表变位，5计数器）为:"+KingPigeonUtils.bytesToHexString(data, iOffset+2+3,1).charAt(1));
					/*数据中bit27~bit0代表具体数值，数据类型为整型；*/
					byte[] bytesTmp = new byte[4];
			        System.arraycopy(data, iOffset+2, bytesTmp, 0, 4); 
			        bytesTmp[3]=(byte) (bytesTmp[3]&0xF0);
			        System.out.println("DIN0的数据为:"+KingPigeonUtils.bytesToIntLe(bytesTmp));
				}else if(sSensorAddr.equals("01")) {
					/*数据中bit28～31代表类型，1代表常闭，2代表常开，3代表变位，5计数器；*/
					System.out.println("DIN1的类型（1代表常闭，2代表常开，3代表变位，5计数器）为:"+KingPigeonUtils.bytesToHexString(data, iOffset+2+3,1).charAt(1));
					/*数据中bit27~bit0代表具体数值，数据类型为整型；*/
					byte[] bytesTmp = new byte[4];
			        System.arraycopy(data, iOffset+2, bytesTmp, 0, 4); 
			        bytesTmp[3]=(byte) (bytesTmp[3]&0xF0);
			        System.out.println("DIN1的数据为:"+KingPigeonUtils.bytesToIntLe(bytesTmp));
				}else if(sSensorAddr.equals("02")) {
					/*数据中bit28～31代表类型，1代表常闭，2代表常开，3代表变位，5计数器；*/
					System.out.println("DIN2的类型（1代表常闭，2代表常开，3代表变位，5计数器）为:"+KingPigeonUtils.bytesToHexString(data, iOffset+2+3,1).charAt(1));
					/*数据中bit27~bit0代表具体数值，数据类型为整型；*/
					byte[] bytesTmp = new byte[4];
			        System.arraycopy(data, iOffset+2, bytesTmp, 0, 4); 
			        bytesTmp[3]=(byte) (bytesTmp[3]&0xF0);
			        System.out.println("DIN2的数据为:"+KingPigeonUtils.bytesToIntLe(bytesTmp));
				}else if(sSensorAddr.equals("03")) {
					/*数据中bit28～31代表类型，1代表常闭，2代表常开，3代表变位，5计数器；*/
					System.out.println("DIN3的类型（1代表常闭，2代表常开，3代表变位，5计数器）为:"+KingPigeonUtils.bytesToHexString(data, iOffset+2+4,1).charAt(1));
					/*数据中bit27~bit0代表具体数值，数据类型为整型；*/
					byte[] bytesTmp = new byte[4];
			        System.arraycopy(data, iOffset+2, bytesTmp, 0, 4); 
			        bytesTmp[3]=(byte) (bytesTmp[3]&0xF0);
			        System.out.println("DIN3的数据为:"+KingPigeonUtils.bytesToIntLe(bytesTmp));
				}
			}else if(sSensorType.equals("05")) {
				if(sSensorAddr.equals("00")) {
					System.out.println("DOUT0的数据（0代表断开1代表闭合）为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}else if(sSensorAddr.equals("01")) {
					System.out.println("DOUT1的数据（0代表断开1代表闭合）为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}else if(sSensorAddr.equals("02")) {
					System.out.println("DOUT2的数据（0代表断开1代表闭合）为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}else if(sSensorAddr.equals("03")) {
					System.out.println("DOUT3的数据（0代表断开1代表闭合）为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}
			}else if(sSensorType.equals("04")) {
				if(sSensorAddr.equals("00")) {
					Float fSensorData = KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2);
					System.out.println("温度数据为:"+fSensorData);
				}else if(sSensorAddr.equals("01")) {
					Float fSensorData = KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2);
					System.out.println("湿度数据为:"+fSensorData);
				}
			}else if(sSensorType.equals("10")) {
				if(sSensorAddr.equals("10")) {
					System.out.println("GSM数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("00")) {
					System.out.println("GSM数据为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}
			}else if(sSensorType.equals("11")) {
				/*0代表撤防1代表留守2代表布防*/
				System.out.println("布撤防信息(0代表撤防1代表留守2代表布防)为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
			}else if(sSensorType.equals("30")) {
				if(sSensorAddr.equals("00")) {
					System.out.println("电源电压大小："+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("01")) {
					System.out.println("AC电源电压状态[0代表消失(掉电)，1代表正常]："+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}else if(sSensorAddr.equals("02")) {
					System.out.println("AC电源电压状态："+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}else if(sSensorAddr.equals("30")) {
					System.out.println("AC电源电压状态[0代表消失(掉电)，1代表正常]："+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("10")) {
					System.out.println("电池电压状态："+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}
			}
    	}
		ctx.writeAndFlush(Unpooled.copiedBuffer(KingPigeonUtils.bMsgPackageWithoutBody("71")));

	}
}
